package com.woniu.stafforder.util;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.woniu.stafforder.dto.TelModelDto;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;


/**
 * 生成发票工具类
 */
public class TelModelUtil {
    /**
     * 提供信息生成发票模板
     *
     * @param telModelDto
     * @return
     */
    public static OutputStream generateTelModel(TelModelDto telModelDto) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        PdfDocument pdfDocument = null;
        PdfWriter pdfWriter = null;
        PdfReader pdfReader = null;
        //先判断订单状态是否是已完成状态且订单未开具
        if (4==telModelDto.getStatus()&&0==telModelDto.getIsInvoice()){
            try {
                pdfReader = new PdfReader("telmodel/TelModel.pdf");
                pdfWriter = new PdfWriter(byteArrayOutputStream);
                pdfDocument = new PdfDocument(pdfReader, pdfWriter);
                PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, false);
                //判断是否为即开类发票属于个人
                if (1==telModelDto.getTypeId()){
                    //发票公司名为个人姓名
                    acroForm.getField("companyName").setValue(telModelDto.getName()).setReadOnly(true);
                    //纳税人识别号
                    acroForm.getField("companyNumber").setValue(" ").setReadOnly(true);
                    //地址，电话
                    acroForm.getField("companyPhone").setValue(" ").setReadOnly(true);
                    //开户行以及账号
                    acroForm.getField("companyAccount").setValue(" ").setReadOnly(true);
                }else {
                    //发票公司名称
                    acroForm.getField("companyName").setValue(telModelDto.getCompanyName()).setReadOnly(true);
                    //纳税人识别号
                    acroForm.getField("companyNumber").setValue(telModelDto.getCompanyName()).setReadOnly(true);
                    //地址，电话
                    acroForm.getField("companyPhone").setValue(telModelDto.getCompanyName()).setReadOnly(true);
                    //开户行以及账号
                    acroForm.getField("companyAccount").setValue(telModelDto.getCompanyName()).setReadOnly(true);
                }
                //发票代码(12位随机生成)
                String code = RandomUtil.randomNumbers(12);
                acroForm.getField("Code").setValue(code).setReadOnly(true);
                //发票号码(8位随机生成)
                String number = RandomUtil.randomNumbers(8);
                acroForm.getField("Number").setValue(number).setReadOnly(true);
                //开票日期(年-月-日)
                acroForm.getField("Date").setValue(DateUtil.today()).setReadOnly(true);
                //校验码(5个为一组共4组)
                StringBuffer Viewer = new StringBuffer();
                for (int i = 0; i < 4; i++) {
                    Viewer.append(RandomUtil.randomNumbers(5) + " ");
                }
                acroForm.getField("Viewer").setValue(Viewer.toString()).setReadOnly(true);
                //价格大写
                acroForm.getField("Chinese").setValue(MoneyToCNFormat.formatToCN(telModelDto.getTotalPrice())).setReadOnly(true);
                //价格小写
                acroForm.getField("Math").setValue(telModelDto.getTotalPrice()).setReadOnly(true);
                //单价
                acroForm.getField("price").setValue(telModelDto.getTotalPrice()).setReadOnly(true);
                //数量(默认1)
                acroForm.getField("buyNumber").setValue("1").setReadOnly(true);
                //金额
                acroForm.getField("totalPrice").setValue(telModelDto.getTotalPrice()).setReadOnly(true);
                //备注
                acroForm.getField("Remark").setValue("无").setReadOnly(true);
                //型号
                acroForm.getField("type").setValue(telModelDto.getType()).setReadOnly(true);
                //服务名称
                acroForm.getField("serverName").setValue(telModelDto.getServerName()).setReadOnly(true);
                //税额（金额*税率,3个点税率）
                BigDecimal Tax = BigDecimal.valueOf(Long.parseLong(telModelDto.getTotalPrice()));
                Tax = Tax.multiply(new BigDecimal(0.03)).setScale(1, RoundingMode.HALF_UP);
                ;
                acroForm.getField("Tax").setValue(String.valueOf(Tax)).setReadOnly(true);

            } catch (IOException e) {
                throw new RuntimeException(e);
            } finally {
                //释放资源
                pdfDocument.close(); // 关闭 PdfDocument
                try {
                    pdfWriter.close(); // 关闭 PdfWriter
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                try {
                    pdfReader.close(); // 关闭 PdfReader
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return pdfWriter.getOutputStream();
        }
       return null;
    }
}
